﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using middleware.dominio.negocio;
using middleware.utiles;

namespace middleware
{
    public partial class VentanaConsultaDinamica : Form
    {
        private IMiddleware instancia = BusinessFactory.getMiddleware();
        private List<String[]> datos;
        private String[] headersColumnas;
        public VentanaConsultaDinamica()
        {
            InitializeComponent();
        }

        private void VentanaConsultaDinamica_Load(object sender, EventArgs e)
        {
            //Cargo las posibles consultas
            cboConsulta.DataSource = instancia.ObtenerConsultasDinamicas();
        }

        private void cboConsulta_SelectedIndexChanged(object sender, EventArgs e)
        {
            dgvDatos.Rows.Clear();
            dgvDatos.Columns.Clear();
            dgvFiltros.Rows.Clear();
            //Obtengo la cantidad y los tipos de parametros
            String[] filtros = instancia.ObtenerNombresFiltros((IConsulta)cboConsulta.SelectedItem);
            int cantidadFiltros = filtros.Count();
            for (int i = 0; i < cantidadFiltros; i++)
                dgvFiltros.Rows.Add(filtros[i]);
        }

        private void btnAceptar_Click(object sender, EventArgs e)
        {
            IConsulta consultaSeleccionada = (IConsulta)cboConsulta.SelectedItem;
            int cantidadFiltros = dgvFiltros.Rows.Count;
            String[] filtros = new String[cantidadFiltros];

            //Recorro la tabla y agrego los filtros
            for (int i = 0; i < cantidadFiltros; i++)
                filtros[i] = dgvFiltros.Rows[i].Cells[1].Value.ToString();

            //Obtengo los headers de las columnas
            headersColumnas = instancia.ObtenerCabezalConsulta(consultaSeleccionada);

            //Ejecuto la consulta y asigno el resultado a la tabla
            datos = instancia.RealizarConsultaDinamica(consultaSeleccionada, filtros);
            this.cargarTablaDatos();
        }

        private void cargarTablaDatos()
        {
            dgvDatos.Columns.Clear();
            dgvDatos.Rows.Clear();
            int cantidadFilas = datos.Count;
            int cantidadColumnas = headersColumnas.Count();
            //Agrego las columnas
            for (int j = 0; j < cantidadColumnas; j++)
                dgvDatos.Columns.Add("columna" + j, headersColumnas[j]);
            //Recorro la tabla y agrego los filtros
            for (int i = 0; i < cantidadFilas; i++)
                dgvDatos.Rows.Add(datos[i]);
        }
    }
}
